home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
lib
/
rcscripts
/
net.modules.d
/
dhcpcd
< prev
next >
Wrap
Text File
|
2006-04-25
|
3KB
|
135 lines
# Copyright (c) 2004-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$
# Contributed by Roy Marples (uberlord@gentoo.org)
# Fix any potential localisation problems
# Note that LC_ALL trumps LC_anything_else according to locale(7)
dhcpcd() {
LC_ALL=C /sbin/dhcpcd "$@"
}
# char* dhcpcd_provides(void)
#
# Returns a string to change module definition for starting up
dhcpcd_provides() {
echo "dhcp"
}
# void dhcpcd_depend(void)
#
# Sets up the dependancies for the module
dhcpcd_depend() {
after interface
}
# bool dhcpcd_check_installed(void)
#
# Returns 1 if dhcpcd is installed, otherwise 0
dhcpcd_check_installed() {
[[ -x /sbin/dhcpcd ]] && return 0
${1:-false} && eerror "For DHCP (dhcpcd) support, emerge net-misc/dhcpcd"
return 1
}
# bool dhcpcd_check_depends(void)
#
# Checks to see if we have the needed functions
dhcpcd_check_depends() {
local f
for f in interface_variable interface_device interface_is_up interface_get_address; do
[[ $( type -t ${f} ) == function ]] && continue
eerror "dhcpcd: missing required function ${f}\n"
return 1
done
return 0
}
# char* dhcpcd_get_vars(char *interface)
#
# Returns a string spaced with possible user set
# configuration variables
dhcpcd_get_vars() {
echo "dhcpcd_${1} dhcp_${1}"
}
# bool dhcpcd_stop(char *iface)
#
# Stop DHCP on an interface by calling dhcpcd -z $iface
#
# Returns 0 (true) when a DHCP address dropped
# otherwise return 1
dhcpcd_stop() {
local iface=${1} count signal pidfile="/var/run/dhcpcd-${1}.pid" dhcp
dhcpcd_check_installed || return 0
[[ ! -f ${pidfile} ]] && return 0
ebegin "Stopping dhcpcd on ${iface}"
local ifvar=$( interface_variable ${1} )
local pid=$( cat ${pidfile} )
eval dhcp=\" \$\{dhcp_${ifvar}\} \"
if [[ ${dhcp} == *' release '* ]]; then
signal="HUP"
else
signal="TERM"
fi
kill -s ${signal} ${pid} &>${devnull}
process_finished ${pid} dhcpcd
eend $? "timed out"
return $?
}
# bool dhcpcd_start(char *iface)
#
# Start DHCP on an interface by calling dhcpcd $iface $options
#
# Returns 0 (true) when a DHCP address is obtained, otherwise 1
dhcpcd_start() {
local iface=${1} opts hostname pidfile="/var/run/dhcpcd-${1}.pid" dhcp
local ifvar=$( interface_variable ${iface} )
interface_exists ${iface} true || return 1
# Get our options
eval opts=\"\$\{dhcpcd_${ifvar}\}\"
# Map some generic options to dhcpcd
eval dhcp=\" \$\{dhcp_${ifvar}\} \"
[[ ${dhcp} == *' nodns '* ]] && opts="${opts} -R"
[[ ${dhcp} == *' nontp '* ]] && opts="${opts} -N"
[[ ${dhcp} == *' nonis '* ]] && opts="${opts} -Y"
[[ ${dhcp} == *' nogateway '* ]] && opts="${opts} -G"
# We transmit the hostname by default
if [[ ${dhcp} != *' nosendhost '* && ${opts} != *'-h '* ]]; then
hostname=$( hostname )
[[ -n ${hostname} && ${hostname} != "(none)" && ${hostname} != localhost ]] \
&& opts="-h ${hostname} ${opts}"
fi
# Bring up DHCP for this interface (or alias)
ebegin "Running dhcpcd"
if ! clean_pidfile ${pidfile} ; then
ewarn "dhcpcd is already running on ${iface}"
eend 0
return 0
fi
eval "dhcpcd ${opts} ${iface}"
eend $? || return 1
# DHCP succeeded, show address retrieved
local addr=$( interface_get_address ${iface} )
einfo "${iface} received address ${addr}"
return 0
}